import Heap from './Heap'

// 对象类
class priorityPoint<T> {
    value: T
    priority: number
    constructor(value:T, priority: number){
        this.value = value
        this.priority = priority
    }
    // 对比对象，必须加上实现这个方法，让程序知道对象的对比是对比里面的哪些属性
    valueOf(){
        return this.priority
    }
}

// 优先队列类，继承普通二叉堆，存放的是对象类的类型，加一个新方法简化录入数据的方式
class priorityHeap<T> extends Heap<priorityPoint<T>>{
    // 入列-其实就是尾部插入后，权限上滤，就是插入方法
    priorityEnqueue(value: T, priority: number) {
        super.insert(new priorityPoint(value, priority))
    }
    // 出列-其实就是抛出极值
    prioritydeQueue(){
        super.extract()
    }
}

const heap = new priorityHeap<string>()
heap.priorityEnqueue('a', 1)
heap.priorityEnqueue('b', 2)
heap.priorityEnqueue('c', 3)
heap.priorityEnqueue('d', 4)
heap.priorityEnqueue('e', 5)
heap.priorityEnqueue('f', 6)
heap.priorityEnqueue('g', 7)
heap.priorityEnqueue('h', 8)
console.log(heap.data);

heap.prioritydeQueue()
console.log(heap.data);
